import { get, post, put, del } from '@/utils/request'
import { Permission, Role } from '@/types/permission'
import { ApiResponse } from '@/types/auth'

/**
 * 权限管理相关服务类
 * 统一管理所有权限相关的API请求
 */
class PermissionService {
  // ============ 权限相关 ============
  
  /**
   * 获取权限列表
   * @param params 查询参数
   * @returns Promise<ApiResponse<Permission[]>> 权限列表
   */
  async getPermissionList(params?: any): Promise<ApiResponse<Permission[]>> {
    return await get('/permissions', params)
  }

  /**
   * 获取权限树
   * @returns Promise<ApiResponse<Permission[]>> 权限树
   */
  async getPermissionTree(): Promise<ApiResponse<Permission[]>> {
    return await get('/permissions/tree')
  }

  /**
   * 根据ID获取权限
   * @param id 权限ID
   * @returns Promise<ApiResponse<Permission>> 权限信息
   */
  async getPermissionById(id: string): Promise<ApiResponse<Permission>> {
    return await get(`/permissions/${id}`)
  }

  /**
   * 创建权限
   * @param data 权限数据
   * @returns Promise<ApiResponse<Permission>> 创建的权限信息
   */
  async createPermission(data: Omit<Permission, 'id'>): Promise<ApiResponse<Permission>> {
    return await post('/permissions', data)
  }

  /**
   * 更新权限
   * @param id 权限ID
   * @param data 更新的权限数据
   * @returns Promise<ApiResponse<Permission>> 更新后的权限信息
   */
  async updatePermission(id: string, data: Partial<Permission>): Promise<ApiResponse<Permission>> {
    return await put(`/permissions/${id}`, data)
  }

  /**
   * 删除权限
   * @param id 权限ID
   * @returns Promise<ApiResponse> 删除结果
   */
  async deletePermission(id: string): Promise<ApiResponse> {
    return await del(`/permissions/${id}`)
  }

  /**
   * 批量删除权限
   * @param ids 权限ID数组
   * @returns Promise<ApiResponse> 删除结果
   */
  async batchDeletePermissions(ids: string[]): Promise<ApiResponse> {
    return await post('/permissions/batch-delete', { ids })
  }

  // ============ 角色相关 ============
  
  /**
   * 获取角色列表
   * @param params 查询参数
   * @returns Promise<ApiResponse<Role[]>> 角色列表
   */
  async getRoleList(params?: any): Promise<ApiResponse<Role[]>> {
    return await get('/roles', params)
  }

  /**
   * 获取所有角色
   * @returns Promise<ApiResponse<Role[]>> 所有角色
   */
  async getAllRoles(): Promise<ApiResponse<Role[]>> {
    return await get('/roles/all')
  }

  /**
   * 根据ID获取角色
   * @param id 角色ID
   * @returns Promise<ApiResponse<Role>> 角色信息
   */
  async getRoleById(id: string): Promise<ApiResponse<Role>> {
    return await get(`/roles/${id}`)
  }

  /**
   * 创建角色
   * @param data 角色数据
   * @returns Promise<ApiResponse<Role>> 创建的角色信息
   */
  async createRole(data: Omit<Role, 'id' | 'createdAt' | 'updatedAt'>): Promise<ApiResponse<Role>> {
    return await post('/roles', data)
  }

  /**
   * 更新角色
   * @param id 角色ID
   * @param data 更新的角色数据
   * @returns Promise<ApiResponse<Role>> 更新后的角色信息
   */
  async updateRole(id: string, data: Partial<Role>): Promise<ApiResponse<Role>> {
    return await put(`/roles/${id}`, data)
  }

  /**
   * 删除角色
   * @param id 角色ID
   * @returns Promise<ApiResponse> 删除结果
   */
  async deleteRole(id: string): Promise<ApiResponse> {
    return await del(`/roles/${id}`)
  }

  /**
   * 批量删除角色
   * @param ids 角色ID数组
   * @returns Promise<ApiResponse> 删除结果
   */
  async batchDeleteRoles(ids: string[]): Promise<ApiResponse> {
    return await post('/roles/batch-delete', { ids })
  }

  /**
   * 获取角色权限
   * @param roleId 角色ID
   * @returns Promise<ApiResponse<string[]>> 权限ID列表
   */
  async getRolePermissions(roleId: string): Promise<ApiResponse<string[]>> {
    return await get(`/roles/${roleId}/permissions`)
  }

  /**
   * 分配角色权限
   * @param roleId 角色ID
   * @param permissionIds 权限ID数组
   * @returns Promise<ApiResponse> 分配结果
   */
  async assignRolePermissions(roleId: string, permissionIds: string[]): Promise<ApiResponse> {
    return await post(`/roles/${roleId}/permissions`, { permissionIds })
  }

  // ============ 用户权限相关 ============
  
  /**
   * 获取用户权限
   * @param userId 用户ID
   * @returns Promise<ApiResponse<string[]>> 权限代码列表
   */
  async getUserPermissions(userId: string): Promise<ApiResponse<string[]>> {
    return await get(`/users/${userId}/permissions`)
  }

  /**
   * 获取用户角色
   * @param userId 用户ID
   * @returns Promise<ApiResponse<string[]>> 角色ID列表
   */
  async getUserRoles(userId: string): Promise<ApiResponse<string[]>> {
    return await get(`/users/${userId}/roles`)
  }

  /**
   * 分配用户角色
   * @param userId 用户ID
   * @param roleIds 角色ID数组
   * @returns Promise<ApiResponse> 分配结果
   */
  async assignUserRoles(userId: string, roleIds: string[]): Promise<ApiResponse> {
    return await post(`/users/${userId}/roles`, { roleIds })
  }

  /**
   * 获取当前用户权限
   * @returns Promise<ApiResponse<string[]>> 当前用户权限代码列表
   */
  async getCurrentUserPermissions(): Promise<ApiResponse<string[]>> {
    return await get('/auth/permissions')
  }

  /**
   * 检查权限
   * @param permission 权限代码
   * @returns Promise<ApiResponse<boolean>> 是否有权限
   */
  async checkPermission(permission: string): Promise<ApiResponse<boolean>> {
    return await get(`/auth/check-permission`, { permission })
  }
}

export default new PermissionService()